﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Drawing;
using QuanCafe_DAO_WS;

namespace QuanCafe
{
    public class NhomThucUongDAO : DataProvider
    {
        // tạo 1 string làm link dẫn đến web lưu trữ ảnh
        private static string url = "http://www.quangcaokhacviet.somee.com/Image/NhomThucUong/";
        
        // viết hàm lấy ra danh sách nhóm thức uống
        public List<NhomThucUongDTO> NTU_LayDanhSachNhomThucUong()
        {
            // tạo 1 đối tượng data
            LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
            // lấy ra danh sách các nhóm thức uống hiện có: theo mã tăng dần
            var nhomThucUongs = data.NhomThucUongs.OrderBy(temp => temp.manhom);
            // tạo 1 biến để lấy kết quả trả về
            List<NhomThucUongDTO> nhomThucUongDTOs = new List<NhomThucUongDTO>();
            // duyệt
            foreach (NhomThucUong _nhom in nhomThucUongs)
            {
                object obj = GetDataFromDataContext(_nhom);
                nhomThucUongDTOs.Add((NhomThucUongDTO)obj);
            }
            return nhomThucUongDTOs;
        }

        // viết hàm thêm nhóm thức uống
        public bool NTU_ThemNhomThucUong(string manhom, string tennhom, string ten_anhdaidien, string thongtin)
        {
            try
            {
                // tạo 1 biến data
                LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
                // kiểm tra mã
                if (NTU_DaTonTaiNhomThucUong(manhom) == false) // chưa có
                {
                    NhomThucUong nhom = new NhomThucUong();
                    nhom.manhom = manhom;
                    nhom.tennhom = tennhom;
                    nhom.anhdaidien = url + ten_anhdaidien;
                    nhom.thongtin = thongtin;

                    //cập nhật
                    data.NhomThucUongs.InsertOnSubmit(nhom);
                    data.SubmitChanges();
                        return true;
                }
                else
                {
                    return false;
                }

            }
            catch
            {
                return false;
            }
        }

        // viết hàm cập nhật ảnh đại diện
        public bool NTU_CapNhatAnhDaiDien(string manhom, string ten_anhdaidien)
        {
            try
            {
                // tạo 1 biến data
                LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
                // kiểm tra mã
                if (NTU_DaTonTaiNhomThucUong(manhom) == true) // chính xác
                {
                    // lấy ra thức uống đó
                    NhomThucUong nhom = data.NhomThucUongs.Single(temp => temp.manhom == manhom);
                    // cập nhật
                    nhom.anhdaidien = url + ten_anhdaidien;
                    data.SubmitChanges();
                    return true;
                }
                else
                {
                    return false;
                }

            }
            catch
            {
                return false;
            }
        }

        // viết hàm cập nhật thông tin nhóm thức uống
        public bool NTU_CapNhatThongTinNhom(string manhom, string tennhom, string thongtin)
        {
            try
            {
                // tạo 1 biến data
                LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
                // kiểm tra mã
                if (NTU_DaTonTaiNhomThucUong(manhom) == true) // chính xác
                {
                    // lấy ra thức uống đó
                    NhomThucUong nhom = data.NhomThucUongs.Single(temp => temp.manhom == manhom);
                    // cập nhật
                    nhom.tennhom = tennhom;
                    nhom.thongtin = thongtin;
                    data.SubmitChanges();
                    return true;
                }
                else
                {
                    return false;
                }

            }
            catch
            {
                return false;
            }
        }

        // viết hàm xóa nhóm thức uống
        public bool NTU_XoaNhomThucUong(string manhom)
        {
            try
            {
                // tạo 1 biến data
                LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
                // kiểm tra mã
                if (NTU_DaTonTaiNhomThucUong(manhom) == true) // chính xác
                {
                    // lấy ra thức uống đó
                    NhomThucUong nhom = data.NhomThucUongs.Single(temp => temp.manhom == manhom);
                    // xóa nhóm này đi
                    data.NhomThucUongs.DeleteOnSubmit(nhom);
                    data.SubmitChanges();
                    return true;
                }
                else
                {
                    return false;
                }

            }
            catch
            {
                return false;
            }
        }

        // viết hàm kiểm tra mã thức uống có tồn tại chưa
        public bool NTU_DaTonTaiNhomThucUong(string manhom)
        {
            // tạo 1 biến LinkQ
            LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
            // lấy ra danh sách những thức uống đã có 
            var nhomThucUongs = data.NhomThucUongs.Where(temp => true);

            // kiểm tra: Any(điều kiện): có bất kì phần tử nào thỏa không?
            if (nhomThucUongs.Any(temp => (temp.manhom == manhom)))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        #region Các hàm kiểm tra truy vấn

        // viết hàm xem thông tin nhóm
        public NhomThucUongDTO NTU_XemThongTinNhom(string manhom)
        {
            try
            {
                // tạo 1 đối tượng data
                LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
                // lấy ra danh sách các nhóm thức uống hiện có: theo mã tăng dần
                NhomThucUong nhom = data.NhomThucUongs.Single(temp => temp.manhom == manhom);
                // tạo biến trả về
                NhomThucUongDTO nhomThucUongDTO = new NhomThucUongDTO();
                nhomThucUongDTO = (NhomThucUongDTO)GetDataFromDataContext(nhom);
                return nhomThucUongDTO;
            }
            catch
            {
                return null;
            }
        }

        // viết hàm lấy ra danh sách nhóm theo mã
        public List<NhomThucUongDTO> NTU_TraCuuTheoMaNhom(string manhom)
        {
            try
            {
                // tạo 1 đối tượng data
                LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
                // lấy ra danh sách các nhóm thức uống hiện có: theo mã tăng dần
                var nhomThucUongs = data.NhomThucUongs.Where(temp => temp.manhom.StartsWith(manhom) == true);
                // tạo 1 biến để lấy kết quả trả về
                List<NhomThucUongDTO> nhomThucUongDTOs = new List<NhomThucUongDTO>();
                // duyệt
                foreach (NhomThucUong _nhom in nhomThucUongs)
                {
                    object obj = GetDataFromDataContext(_nhom);
                    nhomThucUongDTOs.Add((NhomThucUongDTO)obj);
                }
                return nhomThucUongDTOs;
                
            }
            catch
            {
                return null;
            }
        }

        // viết hàm tra cứu theo tên
        public List<NhomThucUongDTO> NTU_TraCuuTheoTenNhom(string tennhom)
        {
            try
            {
                // tạo 1 đối tượng data
                LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
                // lấy ra danh sách các nhóm thức uống hiện có: theo mã tăng dần
                var nhomThucUongs = data.NhomThucUongs.Where(temp => temp.tennhom.StartsWith(tennhom) == true);
                // tạo 1 biến để lấy kết quả trả về
                List<NhomThucUongDTO> nhomThucUongDTOs = new List<NhomThucUongDTO>();
                // duyệt
                foreach (NhomThucUong _nhom in nhomThucUongs)
                {
                    object obj = GetDataFromDataContext(_nhom);
                    nhomThucUongDTOs.Add((NhomThucUongDTO)obj);
                }
                return nhomThucUongDTOs;

            }
            catch
            {
                return null;
            }
        }



        #endregion

        // viết lại hàm GetDataFromDataConText
        protected object GetDataFromDataContext(NhomThucUong _nhom)
        {
            NhomThucUongDTO nhomThucUongDTO = new NhomThucUongDTO();
            // duyệt từng cột
            nhomThucUongDTO.Manhom = _nhom.manhom;
            nhomThucUongDTO.Tennhom = _nhom.tennhom;
            nhomThucUongDTO.Anhdaidien = _nhom.anhdaidien;
            nhomThucUongDTO.Thongtin = _nhom.thongtin;
            // trả về kiểu object
            return (object)nhomThucUongDTO;

        }

    }
}
